This code reproduces the EMA intervention analyses reported in the following manuscript:

Mindful attention to alcohol can reduce cravings in the moment and consumption in daily life

load packages

library(pacman)
pacman::p_load(tidyverse, brms, ggeffects, kableExtra, tidybayes, install = TRUE)

define aesthetics

palette = c("#e64626", "#1985a1", "#4c5c68", "#FAC748")

plot_aes = theme_minimal() +
  theme(legend.position = "top",
        legend.text = element_text(size = 16),
        plot.title = element_text(hjust = 0.5),
        text = element_text(size = 18, family = "Futura Medium"),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        axis.text = element_text(color = "black"),
        axis.line = element_line(colour = "black"),
        axis.ticks.y = element_blank())

load data

merged = read.csv("../data/task_neuro_data.csv", stringsAsFactors = FALSE)
ema = read.csv("../data/ema.csv")
maas = read.csv("../data/MAAS.csv", stringsAsFactors = FALSE)

merge and prep for modeling

between = merged %>%
  filter(condition == "mindful attention") %>%
  select(pID, dot, trial_cond, condition) %>%
  group_by(pID, trial_cond, condition) %>%
  summarize(dot_between = mean(dot, na.rm = TRUE)) %>%
  group_by(trial_cond) %>%
  mutate(dot_between_c = scale(dot_between, scale = FALSE, center = TRUE)) %>%
  mutate(sd_dot = sd(dot_between, na.rm = TRUE),
         dot_between_std = dot_between_c / sd_dot) %>%
  select(pID, condition, trial_cond, dot_between_std) %>%
  mutate(trial_cond = sprintf("%s_expression", trial_cond)) %>%
  spread(trial_cond, dot_between_std)

ema_within = ema %>%
  left_join(., between) %>%
  left_join(., maas)

descriptives

craving

ema_within %>%
  filter(!is.na(active_week)) %>%
  mutate(active_week = ifelse(active_week == "on", "active",
                       ifelse(active_week == "off", "control", NA))) %>%
  group_by(active_week) %>%
  summarize(M = mean(Craving_Alc, na.rm = TRUE),
          SD = sd(Craving_Alc, na.rm = TRUE)) %>%
  knitr::kable(digits = 1, format = "pandoc")
active_week M SD
active 12.4 18.3
control 11.9 17.4

mindful responses

ema_within %>%
  mutate(active_week = ifelse(active_week == "on", "active",
                       ifelse(active_week == "off", "control", NA))) %>%
  filter(!is.na(active_week)) %>%
  group_by(active_week) %>%
  summarize(M = mean(Alc_React_Mindful, na.rm = TRUE),
          SD = sd(Alc_React_Mindful, na.rm = TRUE)) %>%
  knitr::kable(digits = 1, format = "pandoc")
active_week M SD
active 62.5 24.2
control 43.1 29.9

weekly alcohol consumption across conditions

ema_within %>%
  mutate(week = ifelse(signal_count %in% c(1:14), 1,
                ifelse(signal_count %in% c(15:28), 2,
                ifelse(signal_count %in% c(29:42), 3, 4)))) %>%
  group_by(pID, week) %>%
  summarize(sum = sum(drinks_number_noc, na.rm = TRUE)) %>%
  ungroup() %>%
  summarize(min = min(sum),
            max = max(sum),
            mean = mean(sum),
            sd = sd(sum)) %>%
  kable(digits = 1, format = "pandoc")
min max mean sd
0 45 5.4 7

percentage of days consuming alcohol

ema_within %>%
  arrange(pID, Notification.Time) %>% 
  group_by(pID) %>% 
  mutate(date = lag(date)) %>% #lag date to align with week assignment for switches between conditions (which report on the previous day)
  filter(!is.na(active_week)) %>%
  mutate(active_week = ifelse(active_week == "on", "active",
                       ifelse(active_week == "off", "control", NA))) %>%
  group_by(pID, date, active_week) %>%
  summarize(sum = sum(HadAlcohol, na.rm = TRUE)) %>%
  mutate(consumed_alcohol = ifelse(sum > 0, 1, 0)) %>%
  group_by(pID, active_week) %>%
  summarize(n_days = n(),
            drinking_days = sum(consumed_alcohol)) %>%
  mutate(percent = (drinking_days / n_days) * 100) %>%
  group_by(active_week) %>%
  summarize(min = min(percent),
            max = max(percent),
            M = mean(percent),
            SD = sd(percent)) %>%
  kable(digits = 1, format = "pandoc")
active_week min max M SD
active 0 57.1 22.3 15.6
control 0 100.0 26.3 21.1

alcohol consumption when drinking

ema_within %>%
  filter(!is.na(active_week)) %>%
  filter(HadAlcohol == 1) %>%
  mutate(active_week = ifelse(active_week == "on", "active",
                       ifelse(active_week == "off", "control", NA))) %>%
  group_by(active_week) %>%
  summarize(min = min(drinks_number_noc, na.rm = TRUE),
            max = max(drinks_number_noc, na.rm = TRUE),
            M = mean(drinks_number_noc, na.rm = TRUE),
            SD = sd(drinks_number_noc, na.rm = TRUE)) %>%
  knitr::kable(digits = 1, format = "pandoc")
active_week min max M SD
active 0 16 2.9 2.7
control 0 12 3.0 2.4

weekly drinking across condition

ema_within %>%
  mutate(week = ifelse(signal_count %in% c(1:14), 1,
                ifelse(signal_count %in% c(15:28), 2,
                ifelse(signal_count %in% c(29:42), 3, 4)))) %>%
  group_by(pID, week) %>%
  summarize(sum = sum(drinks_number_noc, na.rm = TRUE)) %>%
  ungroup() %>%
  summarize(min = min(sum),
            max = max(sum),
            mean = mean(sum),
            sd = sd(sum)) %>%
  kable(digits = 1, format = "pandoc")
min max mean sd
0 45 5.4 7

effectiveness and individual differences: experience sampling intervention analyses (H3-4)

run model

prior = c(prior(normal(0, 1), class=b))

fm = bf(mindful_response ~ active_week * regulation_expression + (0 + active_week |i| pID)) +
  bf(craving_previous ~ active_week * regulation_expression + mindful_response * regulation_expression +(0 + active_week + mindful_response |i| pID)) +
  bf(drinks_number ~ active_week * regulation_expression + regulation_expression * craving_previous + mindful_response * regulation_expression + 
       (0 + active_week + craving_previous + mindful_response |i| pID)) +
  set_rescor(FALSE)
          
fit_brm_sequential = brm(
  fm,
  data  = ema_within,
  cores = 4,
  thin  = 4,
  seed  = 6523,
  control = list(adapt_delta = .99, max_treedepth = 15),
  prior = prior
)

table

fit_brm_sequential %>%
  broom.mixed::tidy(conf.int = TRUE, conf.level = 0.9) %>%
  filter(effect == "fixed") %>%
  mutate(term = gsub("\\(Intercept\\)", "intercept", term),
         term = gsub("regulation_expression", "signature expression", term),
         term = gsub("active_weekon", "intervention week (active)", term),
         term = gsub("active_weekoff", "intervention week (control)", term),
         term = gsub("mindful_response", "mindful response", term),
         term = gsub("craving_previous", "craving previous", term),
         response = gsub("mindfulresponse", "mindful response", response),
         response = gsub("cravingprevious", "craving previous", response),
         response = gsub("drinksnumber", "number of drinks", response),
         term = gsub(":", " x ", term),
         `b [90% CI]` = sprintf("%.2f [%.2f, %.2f]", estimate, conf.low, conf.high),
         path = ifelse(grepl("intervention", term) & response == "mindful response", "a1",
                ifelse(grepl("mindful", term) & response == "craving previous", "b1",
                ifelse(grepl("craving", term) & response == "number of drinks", "b2",
                ifelse(grepl("intervention", term) & response == "craving previous", "a2",
                ifelse(grepl("mindful", term) & response == "number of drinks", "b3",
                ifelse(grepl("intervention", term) & response == "number of drinks", "c'", ""))))))) %>%
  rename("outcome" = response) %>%
  select(outcome, path, term, `b [90% CI]`) %>%
  arrange(outcome) %>%
  knitr::kable(digits = 2, format = "pandoc")
outcome path term b [90% CI]
craving previous intercept 0.49 [0.25, 0.73]
craving previous a2 intervention week (active) 0.03 [-0.27, 0.34]
craving previous signature expression 0.10 [-0.14, 0.33]
craving previous b1 mindful response -0.29 [-0.45, -0.11]
craving previous a2 intervention week (active) x signature expression -0.20 [-0.54, 0.16]
craving previous b1 signature expression x mindful response -0.02 [-0.18, 0.15]
mindful response intercept -0.20 [-0.35, -0.05]
mindful response a1 intervention week (active) 0.48 [0.28, 0.67]
mindful response signature expression -0.20 [-0.35, -0.07]
mindful response a1 intervention week (active) x signature expression 0.53 [0.33, 0.73]
number of drinks intercept 0.94 [0.57, 1.30]
number of drinks c’ intervention week (active) 0.04 [-0.45, 0.51]
number of drinks signature expression -0.43 [-0.81, -0.09]
number of drinks b2 craving previous 0.62 [0.41, 0.82]
number of drinks b3 mindful response -0.51 [-0.78, -0.21]
number of drinks c’ intervention week (active) x signature expression 0.48 [-0.02, 1.00]
number of drinks b2 signature expression x craving previous -0.02 [-0.23, 0.19]
number of drinks b3 signature expression x mindful response -0.21 [-0.48, 0.07]

indirect effect test

intervention –> mindful responses –> alcohol consumption

hypothesis(
  fit_brm_sequential,
  'b_mindfulresponse_active_weekon * b_drinksnumber_mindful_response +
  cor_pID__mindfulresponse_active_weekon__drinksnumber_mindful_response *
  sd_pID__mindfulresponse_active_weekon *
  sd_pID__drinksnumber_mindful_response
  = 0',
  class = NULL,
  seed  =  6523,
  alpha = .1
)
## Hypothesis Tests for class :
##                 Hypothesis Estimate Est.Error CI.Lower CI.Upper Evid.Ratio
## 1 (b_mindfulrespons... = 0    -0.23      0.11     -0.4    -0.06         NA
##   Post.Prob Star
## 1        NA    *
## ---
## 'CI': 80%-CI for one-sided and 90%-CI for two-sided hypotheses.
## '*': For one-sided hypotheses, the posterior probability exceeds 90%;
## for two-sided hypotheses, the value tested against lies outside the 90%-CI.
## Posterior probabilities of point hypotheses assume equal prior probabilities.

intervention –> craving –> alcohol consumption

hypothesis(
  fit_brm_sequential,
  'b_cravingprevious_active_weekon * b_drinksnumber_craving_previous +
  cor_pID__cravingprevious_active_weekon__drinksnumber_craving_previous *
  sd_pID__cravingprevious_active_weekon *
  sd_pID__drinksnumber_craving_previous
  = 0',
  class = NULL,
  seed  =  6523,
  alpha = .1
)
## Hypothesis Tests for class :
##                 Hypothesis Estimate Est.Error CI.Lower CI.Upper Evid.Ratio
## 1 (b_cravingpreviou... = 0     0.02      0.12    -0.17     0.22         NA
##   Post.Prob Star
## 1        NA     
## ---
## 'CI': 80%-CI for one-sided and 90%-CI for two-sided hypotheses.
## '*': For one-sided hypotheses, the posterior probability exceeds 90%;
## for two-sided hypotheses, the value tested against lies outside the 90%-CI.
## Posterior probabilities of point hypotheses assume equal prior probabilities.

intervention –> mindful responses –> craving –> alcohol consumption

Formula: E(a1,b1,b2) = E(a1)Cov(b1,b2) + E(b1)Cov(a1,b2) + E(b2)Cov(a1,b1) + E(a1)E(b1)E(b2)

hypothesis(
  fit_brm_sequential,
  'b_mindfulresponse_active_weekon *
  cor_pID__cravingprevious_mindful_response__drinksnumber_craving_previous
  * sd_pID__cravingprevious_mindful_response * sd_pID__drinksnumber_craving_previous +
  
  b_cravingprevious_mindful_response *
  cor_pID__mindfulresponse_active_weekon__drinksnumber_craving_previous *
  sd_pID__mindfulresponse_active_weekon * sd_pID__drinksnumber_craving_previous +
  
  b_drinksnumber_craving_previous *
  cor_pID__mindfulresponse_active_weekon__cravingprevious_mindful_response *
  sd_pID__mindfulresponse_active_weekon * sd_pID__cravingprevious_mindful_response +
  
  b_mindfulresponse_active_weekon * b_cravingprevious_mindful_response *  b_drinksnumber_craving_previous
  
  = 0',
  class = NULL,
  seed  =  6523,
  alpha = .1
)
## Hypothesis Tests for class :
##                 Hypothesis Estimate Est.Error CI.Lower CI.Upper Evid.Ratio
## 1 (b_mindfulrespons... = 0    -0.08      0.04    -0.16    -0.02         NA
##   Post.Prob Star
## 1        NA    *
## ---
## 'CI': 80%-CI for one-sided and 90%-CI for two-sided hypotheses.
## '*': For one-sided hypotheses, the posterior probability exceeds 90%;
## for two-sided hypotheses, the value tested against lies outside the 90%-CI.
## Posterior probabilities of point hypotheses assume equal prior probabilities.

summary

summary(fit_brm_sequential, prob = .9)
##  Family: MV(gaussian, gaussian, gaussian) 
##   Links: mu = identity; sigma = identity
##          mu = identity; sigma = identity
##          mu = identity; sigma = identity 
## Formula: mindful_response ~ active_week * regulation_expression + (0 + active_week | i | pID) 
##          craving_previous ~ active_week * regulation_expression + mindful_response * regulation_expression + (0 + active_week + mindful_response | i | pID) 
##          drinks_number ~ active_week * regulation_expression + regulation_expression * craving_previous + mindful_response * regulation_expression + (0 + active_week + craving_previous + mindful_response | i | pID) 
##    Data: ema_within (Number of observations: 291) 
##   Draws: 4 chains, each with iter = 500; warmup = 250; thin = 4;
##          total post-warmup draws = 250
## 
## Group-Level Effects: 
## ~pID (Number of levels: 30) 
##                                                                      Estimate
## sd(mindfulresponse_active_weekoff)                                       0.15
## sd(mindfulresponse_active_weekon)                                        0.14
## sd(cravingprevious_active_weekoff)                                       0.39
## sd(cravingprevious_active_weekon)                                        0.15
## sd(cravingprevious_mindful_response)                                     0.17
## sd(drinksnumber_active_weekoff)                                          0.61
## sd(drinksnumber_active_weekon)                                           0.28
## sd(drinksnumber_craving_previous)                                        0.41
## sd(drinksnumber_mindful_response)                                        0.52
## cor(mindfulresponse_active_weekoff,mindfulresponse_active_weekon)       -0.12
## cor(mindfulresponse_active_weekoff,cravingprevious_active_weekoff)       0.06
## cor(mindfulresponse_active_weekon,cravingprevious_active_weekoff)       -0.04
## cor(mindfulresponse_active_weekoff,cravingprevious_active_weekon)        0.02
## cor(mindfulresponse_active_weekon,cravingprevious_active_weekon)        -0.01
## cor(cravingprevious_active_weekoff,cravingprevious_active_weekon)        0.02
## cor(mindfulresponse_active_weekoff,cravingprevious_mindful_response)    -0.05
## cor(mindfulresponse_active_weekon,cravingprevious_mindful_response)      0.07
## cor(cravingprevious_active_weekoff,cravingprevious_mindful_response)     0.07
## cor(cravingprevious_active_weekon,cravingprevious_mindful_response)     -0.04
## cor(mindfulresponse_active_weekoff,drinksnumber_active_weekoff)          0.01
## cor(mindfulresponse_active_weekon,drinksnumber_active_weekoff)           0.05
## cor(cravingprevious_active_weekoff,drinksnumber_active_weekoff)         -0.11
## cor(cravingprevious_active_weekon,drinksnumber_active_weekoff)          -0.08
## cor(cravingprevious_mindful_response,drinksnumber_active_weekoff)       -0.01
## cor(mindfulresponse_active_weekoff,drinksnumber_active_weekon)          -0.02
## cor(mindfulresponse_active_weekon,drinksnumber_active_weekon)            0.03
## cor(cravingprevious_active_weekoff,drinksnumber_active_weekon)          -0.04
## cor(cravingprevious_active_weekon,drinksnumber_active_weekon)           -0.05
## cor(cravingprevious_mindful_response,drinksnumber_active_weekon)        -0.06
## cor(drinksnumber_active_weekoff,drinksnumber_active_weekon)              0.11
## cor(mindfulresponse_active_weekoff,drinksnumber_craving_previous)        0.16
## cor(mindfulresponse_active_weekon,drinksnumber_craving_previous)        -0.12
## cor(cravingprevious_active_weekoff,drinksnumber_craving_previous)        0.05
## cor(cravingprevious_active_weekon,drinksnumber_craving_previous)        -0.02
## cor(cravingprevious_mindful_response,drinksnumber_craving_previous)     -0.08
## cor(drinksnumber_active_weekoff,drinksnumber_craving_previous)          -0.04
## cor(drinksnumber_active_weekon,drinksnumber_craving_previous)            0.00
## cor(mindfulresponse_active_weekoff,drinksnumber_mindful_response)       -0.11
## cor(mindfulresponse_active_weekon,drinksnumber_mindful_response)         0.11
## cor(cravingprevious_active_weekoff,drinksnumber_mindful_response)        0.17
## cor(cravingprevious_active_weekon,drinksnumber_mindful_response)        -0.05
## cor(cravingprevious_mindful_response,drinksnumber_mindful_response)      0.17
## cor(drinksnumber_active_weekoff,drinksnumber_mindful_response)           0.08
## cor(drinksnumber_active_weekon,drinksnumber_mindful_response)           -0.06
## cor(drinksnumber_craving_previous,drinksnumber_mindful_response)        -0.21
##                                                                      Est.Error
## sd(mindfulresponse_active_weekoff)                                        0.10
## sd(mindfulresponse_active_weekon)                                         0.10
## sd(cravingprevious_active_weekoff)                                        0.20
## sd(cravingprevious_active_weekon)                                         0.12
## sd(cravingprevious_mindful_response)                                      0.12
## sd(drinksnumber_active_weekoff)                                           0.34
## sd(drinksnumber_active_weekon)                                            0.20
## sd(drinksnumber_craving_previous)                                         0.14
## sd(drinksnumber_mindful_response)                                         0.20
## cor(mindfulresponse_active_weekoff,mindfulresponse_active_weekon)         0.33
## cor(mindfulresponse_active_weekoff,cravingprevious_active_weekoff)        0.32
## cor(mindfulresponse_active_weekon,cravingprevious_active_weekoff)         0.31
## cor(mindfulresponse_active_weekoff,cravingprevious_active_weekon)         0.32
## cor(mindfulresponse_active_weekon,cravingprevious_active_weekon)          0.32
## cor(cravingprevious_active_weekoff,cravingprevious_active_weekon)         0.31
## cor(mindfulresponse_active_weekoff,cravingprevious_mindful_response)      0.32
## cor(mindfulresponse_active_weekon,cravingprevious_mindful_response)       0.32
## cor(cravingprevious_active_weekoff,cravingprevious_mindful_response)      0.31
## cor(cravingprevious_active_weekon,cravingprevious_mindful_response)       0.32
## cor(mindfulresponse_active_weekoff,drinksnumber_active_weekoff)           0.31
## cor(mindfulresponse_active_weekon,drinksnumber_active_weekoff)            0.31
## cor(cravingprevious_active_weekoff,drinksnumber_active_weekoff)           0.30
## cor(cravingprevious_active_weekon,drinksnumber_active_weekoff)            0.31
## cor(cravingprevious_mindful_response,drinksnumber_active_weekoff)         0.32
## cor(mindfulresponse_active_weekoff,drinksnumber_active_weekon)            0.30
## cor(mindfulresponse_active_weekon,drinksnumber_active_weekon)             0.31
## cor(cravingprevious_active_weekoff,drinksnumber_active_weekon)            0.33
## cor(cravingprevious_active_weekon,drinksnumber_active_weekon)             0.31
## cor(cravingprevious_mindful_response,drinksnumber_active_weekon)          0.32
## cor(drinksnumber_active_weekoff,drinksnumber_active_weekon)               0.31
## cor(mindfulresponse_active_weekoff,drinksnumber_craving_previous)         0.31
## cor(mindfulresponse_active_weekon,drinksnumber_craving_previous)          0.30
## cor(cravingprevious_active_weekoff,drinksnumber_craving_previous)         0.30
## cor(cravingprevious_active_weekon,drinksnumber_craving_previous)          0.31
## cor(cravingprevious_mindful_response,drinksnumber_craving_previous)       0.31
## cor(drinksnumber_active_weekoff,drinksnumber_craving_previous)            0.32
## cor(drinksnumber_active_weekon,drinksnumber_craving_previous)             0.31
## cor(mindfulresponse_active_weekoff,drinksnumber_mindful_response)         0.31
## cor(mindfulresponse_active_weekon,drinksnumber_mindful_response)          0.31
## cor(cravingprevious_active_weekoff,drinksnumber_mindful_response)         0.29
## cor(cravingprevious_active_weekon,drinksnumber_mindful_response)          0.31
## cor(cravingprevious_mindful_response,drinksnumber_mindful_response)       0.32
## cor(drinksnumber_active_weekoff,drinksnumber_mindful_response)            0.29
## cor(drinksnumber_active_weekon,drinksnumber_mindful_response)             0.31
## cor(drinksnumber_craving_previous,drinksnumber_mindful_response)          0.28
##                                                                      l-90% CI
## sd(mindfulresponse_active_weekoff)                                       0.01
## sd(mindfulresponse_active_weekon)                                        0.01
## sd(cravingprevious_active_weekoff)                                       0.06
## sd(cravingprevious_active_weekon)                                        0.01
## sd(cravingprevious_mindful_response)                                     0.02
## sd(drinksnumber_active_weekoff)                                          0.09
## sd(drinksnumber_active_weekon)                                           0.03
## sd(drinksnumber_craving_previous)                                        0.20
## sd(drinksnumber_mindful_response)                                        0.17
## cor(mindfulresponse_active_weekoff,mindfulresponse_active_weekon)       -0.63
## cor(mindfulresponse_active_weekoff,cravingprevious_active_weekoff)      -0.50
## cor(mindfulresponse_active_weekon,cravingprevious_active_weekoff)       -0.55
## cor(mindfulresponse_active_weekoff,cravingprevious_active_weekon)       -0.50
## cor(mindfulresponse_active_weekon,cravingprevious_active_weekon)        -0.53
## cor(cravingprevious_active_weekoff,cravingprevious_active_weekon)       -0.48
## cor(mindfulresponse_active_weekoff,cravingprevious_mindful_response)    -0.56
## cor(mindfulresponse_active_weekon,cravingprevious_mindful_response)     -0.45
## cor(cravingprevious_active_weekoff,cravingprevious_mindful_response)    -0.44
## cor(cravingprevious_active_weekon,cravingprevious_mindful_response)     -0.56
## cor(mindfulresponse_active_weekoff,drinksnumber_active_weekoff)         -0.50
## cor(mindfulresponse_active_weekon,drinksnumber_active_weekoff)          -0.46
## cor(cravingprevious_active_weekoff,drinksnumber_active_weekoff)         -0.59
## cor(cravingprevious_active_weekon,drinksnumber_active_weekoff)          -0.56
## cor(cravingprevious_mindful_response,drinksnumber_active_weekoff)       -0.52
## cor(mindfulresponse_active_weekoff,drinksnumber_active_weekon)          -0.52
## cor(mindfulresponse_active_weekon,drinksnumber_active_weekon)           -0.48
## cor(cravingprevious_active_weekoff,drinksnumber_active_weekon)          -0.57
## cor(cravingprevious_active_weekon,drinksnumber_active_weekon)           -0.55
## cor(cravingprevious_mindful_response,drinksnumber_active_weekon)        -0.57
## cor(drinksnumber_active_weekoff,drinksnumber_active_weekon)             -0.43
## cor(mindfulresponse_active_weekoff,drinksnumber_craving_previous)       -0.37
## cor(mindfulresponse_active_weekon,drinksnumber_craving_previous)        -0.59
## cor(cravingprevious_active_weekoff,drinksnumber_craving_previous)       -0.47
## cor(cravingprevious_active_weekon,drinksnumber_craving_previous)        -0.52
## cor(cravingprevious_mindful_response,drinksnumber_craving_previous)     -0.57
## cor(drinksnumber_active_weekoff,drinksnumber_craving_previous)          -0.55
## cor(drinksnumber_active_weekon,drinksnumber_craving_previous)           -0.51
## cor(mindfulresponse_active_weekoff,drinksnumber_mindful_response)       -0.58
## cor(mindfulresponse_active_weekon,drinksnumber_mindful_response)        -0.39
## cor(cravingprevious_active_weekoff,drinksnumber_mindful_response)       -0.33
## cor(cravingprevious_active_weekon,drinksnumber_mindful_response)        -0.54
## cor(cravingprevious_mindful_response,drinksnumber_mindful_response)     -0.37
## cor(drinksnumber_active_weekoff,drinksnumber_mindful_response)          -0.43
## cor(drinksnumber_active_weekon,drinksnumber_mindful_response)           -0.54
## cor(drinksnumber_craving_previous,drinksnumber_mindful_response)        -0.65
##                                                                      u-90% CI
## sd(mindfulresponse_active_weekoff)                                       0.33
## sd(mindfulresponse_active_weekon)                                        0.32
## sd(cravingprevious_active_weekoff)                                       0.73
## sd(cravingprevious_active_weekon)                                        0.39
## sd(cravingprevious_mindful_response)                                     0.38
## sd(drinksnumber_active_weekoff)                                          1.15
## sd(drinksnumber_active_weekon)                                           0.66
## sd(drinksnumber_craving_previous)                                        0.64
## sd(drinksnumber_mindful_response)                                        0.86
## cor(mindfulresponse_active_weekoff,mindfulresponse_active_weekon)        0.44
## cor(mindfulresponse_active_weekoff,cravingprevious_active_weekoff)       0.57
## cor(mindfulresponse_active_weekon,cravingprevious_active_weekoff)        0.48
## cor(mindfulresponse_active_weekoff,cravingprevious_active_weekon)        0.52
## cor(mindfulresponse_active_weekon,cravingprevious_active_weekon)         0.52
## cor(cravingprevious_active_weekoff,cravingprevious_active_weekon)        0.54
## cor(mindfulresponse_active_weekoff,cravingprevious_mindful_response)     0.47
## cor(mindfulresponse_active_weekon,cravingprevious_mindful_response)      0.56
## cor(cravingprevious_active_weekoff,cravingprevious_mindful_response)     0.58
## cor(cravingprevious_active_weekon,cravingprevious_mindful_response)      0.49
## cor(mindfulresponse_active_weekoff,drinksnumber_active_weekoff)          0.53
## cor(mindfulresponse_active_weekon,drinksnumber_active_weekoff)           0.53
## cor(cravingprevious_active_weekoff,drinksnumber_active_weekoff)          0.41
## cor(cravingprevious_active_weekon,drinksnumber_active_weekoff)           0.45
## cor(cravingprevious_mindful_response,drinksnumber_active_weekoff)        0.51
## cor(mindfulresponse_active_weekoff,drinksnumber_active_weekon)           0.50
## cor(mindfulresponse_active_weekon,drinksnumber_active_weekon)            0.56
## cor(cravingprevious_active_weekoff,drinksnumber_active_weekon)           0.52
## cor(cravingprevious_active_weekon,drinksnumber_active_weekon)            0.46
## cor(cravingprevious_mindful_response,drinksnumber_active_weekon)         0.49
## cor(drinksnumber_active_weekoff,drinksnumber_active_weekon)              0.60
## cor(mindfulresponse_active_weekoff,drinksnumber_craving_previous)        0.63
## cor(mindfulresponse_active_weekon,drinksnumber_craving_previous)         0.36
## cor(cravingprevious_active_weekoff,drinksnumber_craving_previous)        0.52
## cor(cravingprevious_active_weekon,drinksnumber_craving_previous)         0.51
## cor(cravingprevious_mindful_response,drinksnumber_craving_previous)      0.43
## cor(drinksnumber_active_weekoff,drinksnumber_craving_previous)           0.47
## cor(drinksnumber_active_weekon,drinksnumber_craving_previous)            0.54
## cor(mindfulresponse_active_weekoff,drinksnumber_mindful_response)        0.44
## cor(mindfulresponse_active_weekon,drinksnumber_mindful_response)         0.60
## cor(cravingprevious_active_weekoff,drinksnumber_mindful_response)        0.64
## cor(cravingprevious_active_weekon,drinksnumber_mindful_response)         0.47
## cor(cravingprevious_mindful_response,drinksnumber_mindful_response)      0.67
## cor(drinksnumber_active_weekoff,drinksnumber_mindful_response)           0.54
## cor(drinksnumber_active_weekon,drinksnumber_mindful_response)            0.45
## cor(drinksnumber_craving_previous,drinksnumber_mindful_response)         0.29
##                                                                      Rhat
## sd(mindfulresponse_active_weekoff)                                   1.00
## sd(mindfulresponse_active_weekon)                                    1.00
## sd(cravingprevious_active_weekoff)                                   1.00
## sd(cravingprevious_active_weekon)                                    1.00
## sd(cravingprevious_mindful_response)                                 1.00
## sd(drinksnumber_active_weekoff)                                      1.01
## sd(drinksnumber_active_weekon)                                       1.00
## sd(drinksnumber_craving_previous)                                    1.00
## sd(drinksnumber_mindful_response)                                    1.00
## cor(mindfulresponse_active_weekoff,mindfulresponse_active_weekon)    1.00
## cor(mindfulresponse_active_weekoff,cravingprevious_active_weekoff)   1.00
## cor(mindfulresponse_active_weekon,cravingprevious_active_weekoff)    1.00
## cor(mindfulresponse_active_weekoff,cravingprevious_active_weekon)    1.00
## cor(mindfulresponse_active_weekon,cravingprevious_active_weekon)     1.01
## cor(cravingprevious_active_weekoff,cravingprevious_active_weekon)    1.00
## cor(mindfulresponse_active_weekoff,cravingprevious_mindful_response) 1.00
## cor(mindfulresponse_active_weekon,cravingprevious_mindful_response)  1.00
## cor(cravingprevious_active_weekoff,cravingprevious_mindful_response) 1.01
## cor(cravingprevious_active_weekon,cravingprevious_mindful_response)  1.00
## cor(mindfulresponse_active_weekoff,drinksnumber_active_weekoff)      1.00
## cor(mindfulresponse_active_weekon,drinksnumber_active_weekoff)       1.00
## cor(cravingprevious_active_weekoff,drinksnumber_active_weekoff)      1.00
## cor(cravingprevious_active_weekon,drinksnumber_active_weekoff)       1.00
## cor(cravingprevious_mindful_response,drinksnumber_active_weekoff)    1.00
## cor(mindfulresponse_active_weekoff,drinksnumber_active_weekon)       1.00
## cor(mindfulresponse_active_weekon,drinksnumber_active_weekon)        1.00
## cor(cravingprevious_active_weekoff,drinksnumber_active_weekon)       1.00
## cor(cravingprevious_active_weekon,drinksnumber_active_weekon)        1.00
## cor(cravingprevious_mindful_response,drinksnumber_active_weekon)     1.00
## cor(drinksnumber_active_weekoff,drinksnumber_active_weekon)          1.00
## cor(mindfulresponse_active_weekoff,drinksnumber_craving_previous)    1.00
## cor(mindfulresponse_active_weekon,drinksnumber_craving_previous)     1.00
## cor(cravingprevious_active_weekoff,drinksnumber_craving_previous)    1.00
## cor(cravingprevious_active_weekon,drinksnumber_craving_previous)     1.00
## cor(cravingprevious_mindful_response,drinksnumber_craving_previous)  1.01
## cor(drinksnumber_active_weekoff,drinksnumber_craving_previous)       1.00
## cor(drinksnumber_active_weekon,drinksnumber_craving_previous)        1.00
## cor(mindfulresponse_active_weekoff,drinksnumber_mindful_response)    1.00
## cor(mindfulresponse_active_weekon,drinksnumber_mindful_response)     1.00
## cor(cravingprevious_active_weekoff,drinksnumber_mindful_response)    1.00
## cor(cravingprevious_active_weekon,drinksnumber_mindful_response)     1.01
## cor(cravingprevious_mindful_response,drinksnumber_mindful_response)  1.00
## cor(drinksnumber_active_weekoff,drinksnumber_mindful_response)       1.00
## cor(drinksnumber_active_weekon,drinksnumber_mindful_response)        1.00
## cor(drinksnumber_craving_previous,drinksnumber_mindful_response)     1.00
##                                                                      Bulk_ESS
## sd(mindfulresponse_active_weekoff)                                        785
## sd(mindfulresponse_active_weekon)                                         862
## sd(cravingprevious_active_weekoff)                                        820
## sd(cravingprevious_active_weekon)                                        1018
## sd(cravingprevious_mindful_response)                                      939
## sd(drinksnumber_active_weekoff)                                           740
## sd(drinksnumber_active_weekon)                                            853
## sd(drinksnumber_craving_previous)                                         859
## sd(drinksnumber_mindful_response)                                         846
## cor(mindfulresponse_active_weekoff,mindfulresponse_active_weekon)         897
## cor(mindfulresponse_active_weekoff,cravingprevious_active_weekoff)       1080
## cor(mindfulresponse_active_weekon,cravingprevious_active_weekoff)         910
## cor(mindfulresponse_active_weekoff,cravingprevious_active_weekon)         938
## cor(mindfulresponse_active_weekon,cravingprevious_active_weekon)          890
## cor(cravingprevious_active_weekoff,cravingprevious_active_weekon)         824
## cor(mindfulresponse_active_weekoff,cravingprevious_mindful_response)     1023
## cor(mindfulresponse_active_weekon,cravingprevious_mindful_response)       813
## cor(cravingprevious_active_weekoff,cravingprevious_mindful_response)      979
## cor(cravingprevious_active_weekon,cravingprevious_mindful_response)      1022
## cor(mindfulresponse_active_weekoff,drinksnumber_active_weekoff)           974
## cor(mindfulresponse_active_weekon,drinksnumber_active_weekoff)           1039
## cor(cravingprevious_active_weekoff,drinksnumber_active_weekoff)           921
## cor(cravingprevious_active_weekon,drinksnumber_active_weekoff)            947
## cor(cravingprevious_mindful_response,drinksnumber_active_weekoff)        1115
## cor(mindfulresponse_active_weekoff,drinksnumber_active_weekon)           1066
## cor(mindfulresponse_active_weekon,drinksnumber_active_weekon)            1046
## cor(cravingprevious_active_weekoff,drinksnumber_active_weekon)            982
## cor(cravingprevious_active_weekon,drinksnumber_active_weekon)             919
## cor(cravingprevious_mindful_response,drinksnumber_active_weekon)          918
## cor(drinksnumber_active_weekoff,drinksnumber_active_weekon)              1041
## cor(mindfulresponse_active_weekoff,drinksnumber_craving_previous)         858
## cor(mindfulresponse_active_weekon,drinksnumber_craving_previous)          854
## cor(cravingprevious_active_weekoff,drinksnumber_craving_previous)         987
## cor(cravingprevious_active_weekon,drinksnumber_craving_previous)          940
## cor(cravingprevious_mindful_response,drinksnumber_craving_previous)       898
## cor(drinksnumber_active_weekoff,drinksnumber_craving_previous)            918
## cor(drinksnumber_active_weekon,drinksnumber_craving_previous)            1011
## cor(mindfulresponse_active_weekoff,drinksnumber_mindful_response)         803
## cor(mindfulresponse_active_weekon,drinksnumber_mindful_response)          888
## cor(cravingprevious_active_weekoff,drinksnumber_mindful_response)        1065
## cor(cravingprevious_active_weekon,drinksnumber_mindful_response)          914
## cor(cravingprevious_mindful_response,drinksnumber_mindful_response)       931
## cor(drinksnumber_active_weekoff,drinksnumber_mindful_response)            939
## cor(drinksnumber_active_weekon,drinksnumber_mindful_response)             934
## cor(drinksnumber_craving_previous,drinksnumber_mindful_response)         1025
##                                                                      Tail_ESS
## sd(mindfulresponse_active_weekoff)                                        898
## sd(mindfulresponse_active_weekon)                                         952
## sd(cravingprevious_active_weekoff)                                        916
## sd(cravingprevious_active_weekon)                                         990
## sd(cravingprevious_mindful_response)                                      884
## sd(drinksnumber_active_weekoff)                                           837
## sd(drinksnumber_active_weekon)                                            988
## sd(drinksnumber_craving_previous)                                         572
## sd(drinksnumber_mindful_response)                                         651
## cor(mindfulresponse_active_weekoff,mindfulresponse_active_weekon)         914
## cor(mindfulresponse_active_weekoff,cravingprevious_active_weekoff)        995
## cor(mindfulresponse_active_weekon,cravingprevious_active_weekoff)         865
## cor(mindfulresponse_active_weekoff,cravingprevious_active_weekon)         904
## cor(mindfulresponse_active_weekon,cravingprevious_active_weekon)          835
## cor(cravingprevious_active_weekoff,cravingprevious_active_weekon)         918
## cor(mindfulresponse_active_weekoff,cravingprevious_mindful_response)      988
## cor(mindfulresponse_active_weekon,cravingprevious_mindful_response)       893
## cor(cravingprevious_active_weekoff,cravingprevious_mindful_response)      987
## cor(cravingprevious_active_weekon,cravingprevious_mindful_response)       994
## cor(mindfulresponse_active_weekoff,drinksnumber_active_weekoff)           915
## cor(mindfulresponse_active_weekon,drinksnumber_active_weekoff)            990
## cor(cravingprevious_active_weekoff,drinksnumber_active_weekoff)           754
## cor(cravingprevious_active_weekon,drinksnumber_active_weekoff)           1036
## cor(cravingprevious_mindful_response,drinksnumber_active_weekoff)         915
## cor(mindfulresponse_active_weekoff,drinksnumber_active_weekon)            933
## cor(mindfulresponse_active_weekon,drinksnumber_active_weekon)             995
## cor(cravingprevious_active_weekoff,drinksnumber_active_weekon)            941
## cor(cravingprevious_active_weekon,drinksnumber_active_weekon)             802
## cor(cravingprevious_mindful_response,drinksnumber_active_weekon)          879
## cor(drinksnumber_active_weekoff,drinksnumber_active_weekon)               931
## cor(mindfulresponse_active_weekoff,drinksnumber_craving_previous)         867
## cor(mindfulresponse_active_weekon,drinksnumber_craving_previous)          944
## cor(cravingprevious_active_weekoff,drinksnumber_craving_previous)         946
## cor(cravingprevious_active_weekon,drinksnumber_craving_previous)         1033
## cor(cravingprevious_mindful_response,drinksnumber_craving_previous)       975
## cor(drinksnumber_active_weekoff,drinksnumber_craving_previous)            880
## cor(drinksnumber_active_weekon,drinksnumber_craving_previous)            1032
## cor(mindfulresponse_active_weekoff,drinksnumber_mindful_response)         897
## cor(mindfulresponse_active_weekon,drinksnumber_mindful_response)          870
## cor(cravingprevious_active_weekoff,drinksnumber_mindful_response)         969
## cor(cravingprevious_active_weekon,drinksnumber_mindful_response)          948
## cor(cravingprevious_mindful_response,drinksnumber_mindful_response)       927
## cor(drinksnumber_active_weekoff,drinksnumber_mindful_response)            959
## cor(drinksnumber_active_weekon,drinksnumber_mindful_response)             995
## cor(drinksnumber_craving_previous,drinksnumber_mindful_response)          994
## 
## Population-Level Effects: 
##                                                        Estimate Est.Error
## mindfulresponse_Intercept                                 -0.20      0.09
## cravingprevious_Intercept                                  0.49      0.14
## drinksnumber_Intercept                                     0.94      0.23
## mindfulresponse_active_weekon                              0.48      0.12
## mindfulresponse_regulation_expression                     -0.20      0.08
## mindfulresponse_active_weekon:regulation_expression        0.53      0.12
## cravingprevious_active_weekon                              0.03      0.19
## cravingprevious_regulation_expression                      0.10      0.14
## cravingprevious_mindful_response                          -0.29      0.10
## cravingprevious_active_weekon:regulation_expression       -0.20      0.21
## cravingprevious_regulation_expression:mindful_response    -0.02      0.10
## drinksnumber_active_weekon                                 0.04      0.28
## drinksnumber_regulation_expression                        -0.43      0.22
## drinksnumber_craving_previous                              0.62      0.13
## drinksnumber_mindful_response                             -0.51      0.18
## drinksnumber_active_weekon:regulation_expression           0.48      0.31
## drinksnumber_regulation_expression:craving_previous       -0.02      0.13
## drinksnumber_regulation_expression:mindful_response       -0.21      0.17
##                                                        l-90% CI u-90% CI Rhat
## mindfulresponse_Intercept                                 -0.35    -0.05 1.00
## cravingprevious_Intercept                                  0.25     0.73 1.00
## drinksnumber_Intercept                                     0.57     1.30 1.00
## mindfulresponse_active_weekon                              0.28     0.67 1.00
## mindfulresponse_regulation_expression                     -0.35    -0.07 1.00
## mindfulresponse_active_weekon:regulation_expression        0.33     0.73 1.00
## cravingprevious_active_weekon                             -0.27     0.34 1.00
## cravingprevious_regulation_expression                     -0.14     0.33 1.00
## cravingprevious_mindful_response                          -0.45    -0.11 1.00
## cravingprevious_active_weekon:regulation_expression       -0.54     0.16 1.00
## cravingprevious_regulation_expression:mindful_response    -0.18     0.15 1.00
## drinksnumber_active_weekon                                -0.45     0.51 1.00
## drinksnumber_regulation_expression                        -0.81    -0.09 1.00
## drinksnumber_craving_previous                              0.41     0.82 1.01
## drinksnumber_mindful_response                             -0.78    -0.21 1.00
## drinksnumber_active_weekon:regulation_expression          -0.02     1.00 1.00
## drinksnumber_regulation_expression:craving_previous       -0.23     0.19 1.00
## drinksnumber_regulation_expression:mindful_response       -0.48     0.07 1.00
##                                                        Bulk_ESS Tail_ESS
## mindfulresponse_Intercept                                   883     1073
## cravingprevious_Intercept                                  1062      977
## drinksnumber_Intercept                                      956      908
## mindfulresponse_active_weekon                              1029      935
## mindfulresponse_regulation_expression                       926      906
## mindfulresponse_active_weekon:regulation_expression        1037      973
## cravingprevious_active_weekon                              1084     1025
## cravingprevious_regulation_expression                       945      918
## cravingprevious_mindful_response                            958      905
## cravingprevious_active_weekon:regulation_expression         952      883
## cravingprevious_regulation_expression:mindful_response     1006      953
## drinksnumber_active_weekon                                  994      916
## drinksnumber_regulation_expression                          893      894
## drinksnumber_craving_previous                              1069      947
## drinksnumber_mindful_response                              1003      952
## drinksnumber_active_weekon:regulation_expression            970      917
## drinksnumber_regulation_expression:craving_previous        1002      913
## drinksnumber_regulation_expression:mindful_response         891     1028
## 
## Family Specific Parameters: 
##                       Estimate Est.Error l-90% CI u-90% CI Rhat Bulk_ESS
## sigma_mindfulresponse     0.88      0.04     0.82     0.94 1.00      965
## sigma_cravingprevious     1.28      0.06     1.19     1.39 1.00      754
## sigma_drinksnumber        1.77      0.09     1.63     1.92 1.00      920
##                       Tail_ESS
## sigma_mindfulresponse      902
## sigma_cravingprevious      910
## sigma_drinksnumber        1019
## 
## Draws were sampled using sampling(NUTS). For each parameter, Bulk_ESS
## and Tail_ESS are effective sample size measures, and Rhat is the potential
## scale reduction factor on split chains (at convergence, Rhat = 1).

plots

a1 path: mindful responses ~ intervention week

predicted = ggeffects::ggpredict(fit_brm_sequential, terms = c("active_week", "regulation_expression [0, 1]"),
                                 ci.lvl = 0.9) %>%
  data.frame() %>%
  mutate(x = recode(x, "on" = "active", "off" = "control"),
         group = recode(group, "0" = "mean", "1" = "+1 SD"),
         x = factor(x, levels = c("control", "active")))

slopes_within = ema_within %>%
  filter(!is.na(active_week)) %>%
  select(pID, active_week, mindful_response) %>%
  rename("x" = active_week,
         "predicted" = mindful_response) %>%
  mutate(x = recode(x, "on" = "active", "off" = "control"),
         x = factor(x, levels = c("control", "active"))) %>%
  group_by(pID, x) %>%
  summarize(predicted = mean(predicted, na.rm = TRUE))

(plot_a = predicted %>%
  filter(response.level == "mindfulresponse") %>%
  ggplot(aes(x, predicted)) +
  geom_line(data = slopes_within, aes(x, predicted, group = pID), alpha = .1, size = 1) +
  geom_line(aes(group = group, color = group), size = 1.5, , position = position_dodge(.1)) +
  geom_pointrange(aes(ymin = conf.low, ymax = conf.high, color = group), size = 1.5, linewidth = 2, position = position_dodge(.1)) +
  scale_x_discrete(expand = c(.1, .1)) +
  scale_y_continuous(breaks = c(-1, 0, 1)) +
  scale_color_manual(values = palette, name = "signature expression") +
  labs(x = "\nintervention week", y = "within-person mindful response (SD)\n", title = "\na1 path") +
  plot_aes)

b1 path: craving ~ mindful responses

vals = modelr::seq_range(ema_within$mindful_response, n = 25)

slopes_within = ema_within %>%
  select(pID, mindful_response, craving_previous) %>%
  rename("x" = craving_previous,
         "predicted" = mindful_response)

predicted = ggeffects::ggpredict(fit_brm_sequential, terms = c("mindful_response [vals]", "regulation_expression [0, 1]"),
                                 ci.lvl = 0.9) %>%
  data.frame() %>%
  mutate(group = recode(group, "0" = "mean", "1" = "+1 SD"))

slopes_within = ema_within %>%
  select(pID, mindful_response, craving_previous) %>%
  rename("x" = mindful_response,
         "predicted" = craving_previous)

(plot_b1 = predicted %>%
  filter(response.level == "cravingprevious") %>%
  ggplot(aes(x, predicted)) +
  stat_smooth(data = slopes_within, aes(x, predicted, group = pID), method = "lm", geom ="line", alpha = .1, size = 1, se = FALSE, fullrange = TRUE) +
  geom_line(aes(group = group, color = group), size = 2) +
  geom_ribbon(aes(fill = group, ymin = conf.low, ymax = conf.high), size = 2, alpha = .5) +
  scale_y_continuous(breaks = c(-3, 0, 3, 6)) +
  scale_color_manual(values = palette, name = "signature expression") +
  scale_fill_manual(values = palette, name = "signature expression") +
  labs(x = "\nwithin-person mindful response (SD)", y = "within-person craving (SD)\n", title = "\nb1 path") +
  plot_aes)

b2 path: alchol consumption ~ craving

vals = modelr::seq_range(ema_within$craving_previous, n = 25)

slopes_within = ema_within %>%
  select(pID, drinks_number, craving_previous) %>%
  rename("x" = craving_previous,
         "predicted" = drinks_number)

predicted = ggeffects::ggpredict(fit_brm_sequential, terms = c("craving_previous [vals]", "regulation_expression [0, 1]"),
                                 ci.lvl = 0.9) %>%
  data.frame() %>%
  mutate(group = recode(group, "0" = "mean", "1" = "+1 SD"))

(plot_b2 = predicted %>%
  filter(response.level == "drinksnumber") %>%
  ggplot(aes(x, predicted)) +
  stat_smooth(data = slopes_within, aes(x, predicted, group = pID), method = "lm", geom ="line", alpha = .1, size = 1, se = FALSE, fullrange = TRUE) +
  geom_line(aes(group = group, color = group), size = 2) +
  geom_ribbon(aes(fill = group, ymin = conf.low, ymax = conf.high), size = 2, alpha = .5) +
  scale_color_manual(values = palette, name = "signature expression") +
  scale_fill_manual(values = palette, name = "signature expression") +
  labs(x = "\nwithin-person craving (SD)", y = "within-person number of drinks\n", title = "\nb2 path") +
  plot_aes)

b3 path: alchol consumption ~ mindful responses

vals = modelr::seq_range(ema_within$mindful_response, n = 25)

slopes_within = ema_within %>%
  select(pID, drinks_number, mindful_response) %>%
  rename("x" = mindful_response,
         "predicted" = drinks_number)

predicted = ggeffects::ggpredict(fit_brm_sequential, terms = c("mindful_response [vals]", "regulation_expression [0, 1]"),
                                 ci.lvl = 0.9) %>%
  data.frame() %>%
  mutate(group = recode(group, "0" = "mean", "1" = "+1 SD"))

(plot_b3 = predicted %>%
  filter(response.level == "drinksnumber") %>%
  ggplot(aes(x, predicted)) +
  stat_smooth(data = slopes_within, aes(x, predicted, group = pID), method = "lm", geom ="line", alpha = .1, size = 1, se = FALSE, fullrange = TRUE) +
  geom_line(aes(group = group, color = group), size = 2) +
  geom_ribbon(aes(fill = group, ymin = conf.low, ymax = conf.high), size = 2, alpha = .5) +
  scale_color_manual(values = palette, name = "signature expression") +
  scale_fill_manual(values = palette, name = "signature expression") +
  labs(x = "\nwithin-person mindful response (SD)", y = "within-person number of drinks\n", title = "\nb3 path") +
  plot_aes)

combined

ggpubr::ggarrange(plot_a, plot_b1, plot_b2, plot_b3, nrow = 2, ncol = 2, common.legend = TRUE)